博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Jenkins+Docker的自动化代码发布流程
阅读量:6071 次
发布时间:2019-06-20

本文共 2822 字,大约阅读时间需要 9 分钟。

hot3.png

前段时间写了一篇,主要用python接收gitlab的push请求,然后调用不同的shell脚本来实现。本文将使用基于Jenkins+Docker来实现另一套的自动化CI/CD的代码发布流程,至于jenkins和docker是什么这里就不多说了,能找到这篇文章的应该都知道他们是干什么用的,下面是整体的流程和部署。

一、总体流程设计

流程解析:

1、开发人员将代码推送至git仓库。

2、通过Jenkins上事先设置好的触发器来拉取git仓库的代码。

3、代码在Jenkins上通过设置好的规则编译打包,然后build成docker镜像,推送至docker仓库。

4、Jenkins执行shell,连接到服务器上,拉取刚刚build的docker镜像并运行。

5、发布完成后,通过邮件通知测试人员。

资源相关:

git服务 | github |

-|- jenkins | jenkins.test.com | 项目服务器 | 120.78.xxx.xxx |

jenkins服务和项目服务都是我们线上的测试服务器,所以地址就不公开了。


二、git相关

本文我用的是自己的githubhttps://github.com/opsonly,上面有一个用于测试的个人django的项目。

三、Jenkins设置

1、邮件设置

这里注意要设置Extended E-mail Notification,否则后面无法发送邮件!

  • 网站内容类型用的html,模板如下:
            
${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志
本邮件由系统自动发出,无需回复! 项目 ${PROJECT_NAME }已构建完成!
构建结果 - ${BUILD_STATUS}
构建信息

失败用例


$FAILED_TESTS

最近提交(#$SVN_REVISION)


    ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="
  • %d [%a] %m
  • "}
详细提交: ${PROJECT_URL}changes

2、创建一个任务(自由风格的软件项目)django-web,选择参数化构建

3、源码配置 · 4、触发器配置

根据自己情况而设置

5、构建配置

选择执行shell

注意:这里是整个流程的关键步骤,本文中是拉取github上的代码后,将其cp至另一个专用于build的目录,另外也将写好的Dockerfile文件也复制至该目录,然后完成docker镜像的build和push操作。

  • 项目服务器上的发布脚本如下
  • Dockerfile文件如下:
FROM python:3.7ADD ./django-web ./appWORKDIR ./appRUN pip3 install -r requirements.txtCMD ["python","manage.py","runserver","0.0.0.0:8000"]

6、构建后操作

在列表中选择“Editable Email Notification”。

注意:这里要选择Editable Email Notification,前面的邮件配置为Extended E-mail Notification,一定要对应起来,不然无法成功发送邮件(因为Jenkins还有自带的一个邮件通知,不过本文中没有使用)。

整个的配置流程大致就是这样子,可以根据实际情况再作调整,比如构建脚本和Dockerfile文件都还有很大的调整空间。

四、效果图

1、传入tag参数并构建项目

2、构建成功收到邮件通知:

3、打开刚刚构建成功的项目服务器的url,正常访问没有问题.

4、到项目服务器上查看一下启动情况:


五、总结

1、数据库问题: 因为上面的django项目用的mysql,而显然本文中mysql并没有用容器实现,如果想要容器化mysql,需要注意mysql和django项目之间的网络互通问题。django的mysql地址应填入容器mysql的容器名。

2、权限问题: 如果读者根据上面步骤来试验,可能会遇到mysql的权限问题,因为我的本地的mysql服务已加入了root@’%’账号,如果你是初始化的mysql,会出现连接失败的问题。解决方法很简单,就是根据情况添加特定的mysql账号。


喜欢我写的东西的朋友可以关注一下我的公众号,上面有我的学习资源以及一些其他福利。:Devops部落

转载于:https://my.oschina.net/dingxiaoshui/blog/3029146

你可能感兴趣的文章
java父子进程通信
查看>>
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>